#include "network.h"
#include <stdio.h>   // 调试输出
#include <string.h>  // memset

//连接服务器
int connect_to_server(ClientConfig *config) {
    // 1. 创建TCP套接字（IPv4 + 流式传输）
    int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (sock_fd == -1) {
        perror("创建TCP套接字失败");
        return -1;
    }

    // 2. 填充服务器地址
    struct sockaddr_in server_addr;
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(config->server_port);  // 端口转网络字节序
    server_addr.sin_addr.s_addr = inet_addr(config->server_ip);  // IP转二进制

    // 3. 发起连接
    if (connect(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
        perror("连接服务器失败");
        close(sock_fd);
        return -1;
    }

    printf("[客户端] 成功连接到服务器\n");
    printf("端口 %d IP地址 %s\n", config->server_port, config->server_ip);
    return sock_fd;  // 返回连接套接字描述符
}

//发送数据
ssize_t send_data(int sock_fd, const char *data) {
    ssize_t sent = send(sock_fd, data, strlen(data), 0);
    if (sent == -1) {
        perror("发送数据失败");
    }
    return sent;
}

//接收数据
ssize_t recv_data(int sock_fd, char *buffer, size_t buffer_size) {
    // 清空缓冲区（避免残留数据）
    memset(buffer, 0, buffer_size);
    // 接收数据（留1个字节存'\0'，避免溢出）
    ssize_t recv_len = recv(sock_fd, buffer, buffer_size - 1, 0);
    if (recv_len == -1) {
        perror("接收数据失败");

    } else if (recv_len == 0) {
        printf("[客户端] 服务器已断开连接！\n");
    }
    return recv_len;
}